#include"SearchBinaryTree.h"

#include<string>

//int main()
//{
//	// 1、查找
//	// 2、去重
//	// 3、排序+去重
//	int a[] = { 8, 3, 1, 10, 6, 4, 7, 14, 13 };
//	//int a[] = { 8, 3, 3, 1, 3, 10, 6, 3, 4, 7, 5, 14, 13 };
//
//	BSTree<int> t;
//	for (auto e : a)
//	{
//		t.Insert(e);
//	}
//
//	t.Insert(4);
//	t.Insert(16);
//
//	t.InOrder();
//
//	//t.Erase(3);
//	//t.InOrder();
//
//	t.Erase(4);
//	t.InOrder();
//
//	t.Erase(3);
//	t.InOrder();
//
//	for (auto e : a)
//	{
//		t.Erase(e);
//		t.InOrder();
//	}
//
//	return 0;
//}



//int main()
//{
//	kv_of_ltw::BSTree<string, string> dict;
//	dict.Insert("left", "左边");
//	dict.Insert("right", "右边");
//	dict.Insert("insert", "插入");
//	dict.Insert("string", "字符串");
//
//	string str;
//	while (cin >> str)
//	{
//		auto ret = dict.Find(str);
//		if (ret)
//		{
//			cout << "->" << ret->_value << endl;
//		}
//		else
//		{
//			cout << "无此单词，请重新输入" << endl;
//		}
//	}
//
//	return 0;
//}

// int main()
// {
// 	string arr[] = { "苹果", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜", "苹果", "香蕉", "苹果", "香蕉" };
// 	kv_of_ltw::BSTree<string, int> countTree;
// 	for (const auto& str : arr)
// 	{
// 		// 先查找水果在不在搜索树中
// 		// 1、不在，说明水果第一次出现，则插入<水果, 1>
// 		// 2、在，则查找到的节点中水果对应的次数++
// 		//BSTreeNode<string, int>* ret = countTree.Find(str);
// 		auto ret = countTree.Find(str);
// 		if (ret == NULL)
// 		{
// 			countTree.Insert(str, 1);
// 		}
// 		else
// 		{
// 			ret->_value++;
// 		}
// 	}

// 	countTree.InOrder();

// 	return 0;
// }

#include<set>

// int main()
// {
// 	// 去重+排序
// 	set<int> s;
// 	s.insert(5);
// 	s.insert(2);
// 	s.insert(7);
// 	s.insert(4);
// 	s.insert(9);
// 	s.insert(9);
// 	s.insert(9);
// 	s.insert(1);
// 	s.insert(5);
// 	s.insert(9);

// 	//set<int>::iterator it = s.begin();
// 	auto it = s.begin();
// 	while (it != s.end())
// 	{
// 		cout << *it << " ";
// 		++it;
// 	}
// 	cout << endl;

// 	for (auto e : s)
// 	{
// 		cout << e << " ";
// 	}
// 	cout << endl;

// 	kv_of_ltw::BSTree<string, string> dict;
// 	dict.Insert("left", "左边");
// 	dict.Insert("right", "右边");
// 	dict.Insert("insert", "插入");
// 	dict.Insert("string", "字符串");

// 	kv_of_ltw::BSTree<string, string> copy(dict);


// 	return 0;
// }


#include <algorithm>
// int main()
// {
// 	// 去重+排序
// 	set<int> s;
// 	s.insert(5);
// 	s.insert(2);
// 	s.insert(7);
// 	s.insert(4);
// 	s.insert(9);
// 	s.insert(9);
// 	s.insert(9);
// 	s.insert(1);
// 	s.insert(5);
// 	s.insert(9);

// 	//set<int>::iterator it = s.begin();
// 	auto it = s.begin();
// 	while (it != s.end())
// 	{
// 		cout << *it << " ";
// 		++it;
// 	}
// 	cout << endl;

// 	// 删除最小值
// 	s.erase(s.begin());
// 	int x;
// 	cin >> x;
// 	/*int num = s.erase(x);
// 	if (num == 0)
// 	{
// 		cout << x << "不存在！" << endl;
// 	}*/

// 	auto pos = s.find(x);
// 	if (pos != s.end())
// 	{
// 		s.erase(pos);
// 	}
// 	else
// 	{
// 		cout << x << "不存在！" << endl;
// 	}

// 	for (auto e : s)
// 	{
// 		cout << e << " ";
// 	}
// 	cout << endl;

// 	auto pos1 = find(s.begin(), s.end(), x);  // O(N)
// 	auto pos2 = s.find(x);                    // O(logN)

// 	cin >> x;
// 	if (s.count(x))                           // O(log(N))
// 	{
// 		cout << x << "在！" << endl;
// 	}
// 	else
// 	{
// 		cout << x << "不存在！" << endl;
// 	}

// 	return 0;
// }




// int main()
// {
//    std::set<int> myset;
//    std::set<int>::iterator itlow, itup;

//    for (int i = 1; i < 10; i++) myset.insert(i * 10); // 10 20 30 40 50 60 70 80 90

//    // [30, 60]
//    // >= 30
//    itlow = myset.lower_bound(30);                //
//    // > 60
//    itup = myset.upper_bound(60);                 //               
//    myset.erase(itlow, itup);                     // 10 20 70 80 90

//    std::cout << "myset contains:";
//    for (std::set<int>::iterator it = myset.begin(); it != myset.end(); ++it)
//        std::cout << ' ' << *it;
//    std::cout << '\n';

//    return 0;
// }




// int main()
// {
// 	// 排序
// 	multiset<int> s;
// 	s.insert(5);
// 	s.insert(2);
// 	s.insert(7);
// 	s.insert(4);
// 	s.insert(9);
// 	s.insert(9);
// 	s.insert(9);
// 	s.insert(1);
// 	s.insert(5);
// 	s.insert(9);

// 	auto it = s.begin();
// 	while (it != s.end())
// 	{
// 		cout << *it << " ";
// 		++it;
// 	}
// 	cout << endl;


// 	int x;
// 	cin >> x;
// 	auto pos = s.find(x);
// 	while (pos != s.end() && *pos == x)
// 	{
// 		cout << *pos << " ";
// 		++pos;
// 	}
// 	cout << endl;

// 	cout << s.count(x) << endl;

// 	s.erase(x);
// 	for (auto e : s)
// 	{
// 		cout << e << " ";
// 	}
// 	cout << endl;

// 	return 0;
// }

////////////////////////////////////////////////////////////////////////
#include<map>

int main()
{
	//map<string, string> dict;
	//pair<string, string> kv1("left", "左边");
	//dict.insert(kv1);

	//dict.insert(pair<string, string>("right", "右边"));

	//dict.insert(make_pair("insert", "插入"));

	////pair<string, string> kv2 = {"string","字符串" };
	//dict.insert({ "string", "字符串" });

	map<string, string> dict = { {"left", "左边"}, {"right", "右边"},{"insert", "插入"},{ "string", "字符串" } };
	
	map<string, string>::iterator it = dict.begin();
	while (it != dict.end())
	{
		//cout << (*it).first <<":"<<(*it).second << endl;
		//cout << (*it).first << ":" << (*it).second << endl;
		cout << it->first << ":" << it->second << endl;

		++it;
	}
	cout << endl;

	for (const auto& e : dict)
	{
		cout << e.first << ":" << e.second << endl;
	}
	cout << endl;

	/*for (auto& [x, y] : dict)
	{
		cout << x << ":" << y << endl;
	}
	cout << endl;*/

	string str;
	while (cin >> str)
	{
		auto ret = dict.find(str);
		if (ret != dict.end())
		{
			cout << "->" << ret->second << endl;
		}
		else
		{
			cout << "无此单词，请重新输入" << endl;
		}
	}

	return 0;
}

// int main()
// {
// 	string arr[] = { "苹果", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜", "苹果", "香蕉", "苹果", "香蕉" };
// 	map<string, int> countTree;
// 	for (const auto& str : arr)
// 	{
// 		// 先查找水果在不在搜索树中
// 		// 1、不在，说明水果第一次出现，则插入<水果, 1>
// 		// 2、在，则查找到的节点中水果对应的次数++
// 		//BSTreeNode<string, int>* ret = countTree.Find(str);
// 		auto ret = countTree.find(str);
// 		if (ret == countTree.end())
// 		{
// 			countTree.insert({ str, 1 });
// 		}
// 		else
// 		{
// 			ret->second++;
// 		}
// 	}

// 	for (const auto& e : countTree)
// 	{
// 		cout << e.first << ":" << e.second << endl;
// 	}
// 	cout << endl;

// 	return 0;
// }